// cd.js
import moment from "moment"
import { Config } from '../components/index.js'

// cd需要的变量
let currentTime
let lastTime
// 使用一个对象来存储每个用户决斗的次数
let counts = {}
// 决斗次数
let count

// 根据不同的功能返回不同的提示信息和cd时间
let msg
let cd

// 导出一个函数，接收e作为参数，返回一个布尔值表示是否触发了cd
export async function checkCD(e) {
    // 根据e的msg判断是哪种功能
    let fun;
    if (e.msg.match(/^#?开导|打胶$/)) {
        fun = "ziwei";
    } else if (e.msg.match(/^#?嗦牛牛$/)) {
        fun = "suo";
    } else if (e.msg.match(/^#?决斗$/)) {
        fun = "playerpk";
    } else {
        return false; // 不是这三种功能，直接返回false
    }

    // 先给cd赋一个默认值
    switch (fun) {
        case "ziwei":
            cd = Config.ypcd;
            break;
        case "suo":
            cd = Config.suonncd;
            break;
        case "playerpk":
            cd = Config.jjcd;
            break;
    }
    // 获取当前时间和上次执行时间
    currentTime = moment(new Date()).format("YYYY-MM-DD HH:mm:ss")
    lastTime = await redis.ttl(`Yz:${fun}:${e.group_id}:${e.user_id}:${fun}`)
    // 获取当前用户的次数，如果没有就默认为0
    count = counts[`${e.user_id}-${e.group_id}`] || 0;
    // 判断是否触发了cd
    if (
        (fun == "playerpk" && count >= 2 && lastTime > 0) ||
        (fun != "playerpk" && lastTime > 0)
    ) {
        switch (fun) {
            case "ziwei":
                msg = `导不动了，请等待${ lastTime }秒后再去开导`
                break;
            case "suo":
                msg = `嗦不动了，请等待${ lastTime }秒后再嗦`
                break;
            case "playerpk":
                msg = `战斗两次了太累了，请等待${ lastTime }秒后再去🤺`
                break;
        }
        // 返回提示信息
        return msg
    } else {
        // 没有触发cd，更新执行时间并返回false
        await redis.set(`Yz:${fun}:${e.group_id}:${e.user_id}:${fun}`, currentTime, {
            EX: cd,
        });
        // 如果是决斗功能，更新用户的次数
        if (fun == "playerpk") {
            count++
            counts[`${e.user_id}-${e.group_id}`] = count
        }
        return false;
    }
}

// 导出一个函数，接收e和str作为参数，根据不同的情况取消cd
export async function cancelCD(e, str) {
    // 根据e的msg判断是哪种功能
    let fun;
    if (e.msg.match(/^#?开导|打胶$/)) {
        fun = "ziwei";
    } else if (e.msg.match(/^#?嗦牛牛$/)) {
        fun = "suo";
    } else if (e.msg.match(/^#?决斗$/)) {
        fun = "playerpk";
    } else {
        return; // 不是这三种功能，直接返回
    }
    // 根据不同的功能和str判断是否需要取消cd
    let needCancel = false;
    switch (fun) {
        case "ziwei":
            if (
                str == `"你还没有牛牛捏，赶快生成牛牛"` ||
                str == `"你还没有牛牛捏，快去生成牛牛叭。"`
            ) {
                needCancel = true;
            }
            break;
        case "suo":
            if (
                str == `"你还没有牛牛捏"` ||
                str == `"对方还没有牛牛捏"` ||
                str == `"对方还没有牛牛捏，你就不要强人所难咯。"`
            ) {
                needCancel = true;
            }
            break;
        case "playerpk":
            if (
                str == `"你还没有牛牛捏"` ||
                str == `"对方还没有牛牛捏"` ||
                str == `"对方还没有牛牛捏，你就不要强人所难咯。"`
            ) {
                needCancel = true;
            }
            break;
        default:
            break;
    }
    // 如果需要取消cd，删除redis里对应的键值，并重置用户的次数
    if (needCancel === true) {
        await redis.del(`Yz:${fun}:${e.group_id}:${e.user_id}:${fun}`);
        if (fun == "playerpk") {
            count = 0;
            counts[`${e.user_id}-${e.group_id}`] = count
        }
    }
}